# 第2章 语法
# 由于使用块注释,会报语法错误
js中/* */块注释,中的字符也可能出现在正则表达式字面量中,所以块注释对于被注释的代码块来说是不安全的。应该避免使用/* */,而使用//注释。
// /*
// var a=/a*/.match(a)
// */
1
2
3
2
3
# js不允许使用保留字来命名变量或参数
var undefined=1;
var NaN=2;
var Infinity=3;
// var if=1;//if报错
console.log(undefined,NaN,Infinity);//undefined,NaN,Infinity 并不会打印123
// function (if,b){}//if报错
// var if={}//if报错
var obj={
false:{new:1},
if:4,//保留字
undefined:1,
NaN:2,
Infinity:3
}
console.log(obj.false.new);//1
console.log(obj.if)//4
console.log(obj.undefined)//1
console.log(obj.NaN)//2
console.log(obj.Infinity)//3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 1和1.0
console.log(1===1.0)//true
1
# 转义字符反斜杠\
var a='\1111x\aa"x\'x/nx\nx\\x';
console.log(a)
// I1xaa"x'x/nx
// x\x
1
2
3
4
2
3
4
# switch中default在最上边
switch ('2') {
default:
console.log('default')
break;
case 2:
console.log('数字2')
break;
case '2':
console.log('字符串2')//会进这个
break;
}
//先执行case中的语句,没有找到匹配就执行default语句。
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# js不允许在return关键字和表达式间换行,如果return后没值,就返回undefined
var a2=function(){
return
2;
}()
console.log(a2)//undefined
1
2
3
4
5
2
3
4
5
# js不允许在break关键字和标签间换行
function foo() {
dance:
for(var k = 0; k < 4; k++){
dd:
console.log(k)//0
for(var m = 0; m < 4; m++){
if(m == 2){
//这样就可以直接break掉整个循环嵌套了!!
break dance;
/* 换行就不起作用了 */
// break
// dance;
}
console.log(m)//0,1
}
}
console.log('dance')
}
foo();//0 0 1 dance
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# typeof
typeof运算符产生的值有'number'、'string'、'boolean'、'undefined'、'function'、'object'
# &&和&、||和|
function x1(){
return true
}
function x2(){
return false
}
console.log(x1()&&x2());//x1和x2都执行了,返回false
console.log(x2()&&x1());//只有x2执行了,x1没执行,返回false
console.log(x1()&x2());//x1、x2都执行了,返回0
console.log(x2()&x1());//x1、x2都执行了,返回0
console.log(x1()||x2());//只有x1执行了,返回true
console.log(x2()||x1());//x1、x2都执行了,返回true
console.log(x1()|x2());//x1、x2都执行了,返回1
console.log(x2()|x1());//x1、x2都执行了,返回1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
总结:
双与(&&)如果第一个返回值为false第二个就不执行,第一个为true就执行第二个。返回结果为true或false
单与(&)两个都执行完,返回结果为与计算后的值
双或(||)如果第一个返回值为false执行第二个,第一个返回值为true第二个就不执行。返回结果为true或false
单或(|)两个都执行完,返回结果为与计算后的值
# js内建对象
Number、String、Boolean、Date、Math、RegExp、Array、Function
for (const i of 'qwer') {
console.log(i)//qwer
}
for (const i in 'qwer') {
console.log(i)//0123
}
var bbb={0:'q',1:'w',length:2}
var eee={0:'q',1:'w',length:2,[Symbol.iterator]:Array.prototype[Symbol.iterator]}
var aaa={0:'q',1:'w'}
var ccc=[1,2,3]
var ddd='1234'
console.log(Array.from(aaa)) //[]
console.log(Array.from(bbb)) //["q", "w"]
console.log(Array.from(ccc)) //[1,2,3]
console.log(Array.from(ddd)) //["1", "2", "3", "4"]
// for (const x of bbb) {
// console.log(x)//Uncaught TypeError: bbb is not iterable
// }
for (const x of eee) {
console.log(x)//qw
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21